package com.chaos.grpcserver;

import com.chaos.remoting.grpc.User;
import com.chaos.remoting.grpc.UserServiceGrpc;
import io.grpc.stub.StreamObserver;
import net.devh.springboot.autoconfigure.grpc.server.GrpcService;

@GrpcService(User.class)//proto文件定义接口方法所在的类
public class UserService extends UserServiceGrpc.UserServiceImplBase {

    /**
     * 此方法定义为简单rpc，不支持多次调用onNext方法
     * @param request 请求参数
     * @param responseObserver 应答观察者
     */
    @Override
    public void register(User.UserRequest request, StreamObserver<User.UserResponse> responseObserver) {
        //拿取参数，
        String name = request.getName();
        //此处可以使用参数来做一些业务逻辑
        //组装响应体
        User.UserResponse response = User.UserResponse.newBuilder().setCode(1).setMsg("注册成功").build();
        //此处只能调用一次onNext方法，因为方法定义时简单rpc
        responseObserver.onNext(response);
        //当客户端发送完毕后，会执行onCompleted来返回一个对象给客户端
        responseObserver.onCompleted();
    }

    /**
     * 此方法在proto文件中的定义采用的是流式rpc，所以可以多次调用onNext方法组装返回值
     * @param request
     * @param responseObserver
     */
    @Override
    public void queryAll(User.UserRequest request, StreamObserver<User.UserResponse> responseObserver) {
        //多次调用onNext方法组装返回值
        responseObserver.onNext(User.UserResponse.newBuilder().setCode(1).setMsg("注册成功").build());
        responseObserver.onNext(User.UserResponse.newBuilder().setCode(2).setMsg("hhhh").build());
        responseObserver.onCompleted();
    }
}
